package com.qjdchina.sku.util;



import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 
 * 类名:DateUtil    
 * 功能:简单的日期工具类Z     
 * 日期: 2016年1月19日 上午10:39:25    
 * @author wangzheng  
 * @version 1.0.0   
 * @since  JDK 1.7  
 * @see
 */
public class DateUtil {

    public static final String PATTERN = "yyyy-MM-dd HH:mm:ss";

    public static final String SHORT_PATTERN = "yyyy-MM-dd";

    private static final Logger LOGGER = LoggerFactory.getLogger(DateUtil.class);

    private DateUtil() {

    }

    /**
     * 
     * 日期比较大小   
     * @author wangzheng 2016年1月19日 上午10:39:52   
     * @param d1    当前的日期
     * @param d2    需要比较的日期
     * @param margin    时间之差
     * @return  
     * @since JDK 1.7
     */
    public static boolean isBefore(Date d1, Date d2, long margin) {
        long t1 = d1.getTime();
        long t2 = d2.getTime();
        long m = (t1 - t2) / 1000;
        if (m > margin) {
            return true;
        }
        return false;
    }

    /**
     * 
     * 日期转换成字符串 时间到秒   
     * @author wangzheng 2016年1月19日 上午10:40:16   
     * @param date
     * @return  
     * @since JDK 1.7
     */
    public static String dateToStr(Date date) {
        SimpleDateFormat format = new SimpleDateFormat(PATTERN);
        return format.format(date);
    }

    /**
     * 
     * 日期转换成字符串 时间 年月日   
     * @author wangzheng 2016年1月31日 下午2:45:04   
     * @param date
     * @return  
     * @since JDK 1.7
     */
    public static String dateToShortStr(Date date) {
        SimpleDateFormat format = new SimpleDateFormat(SHORT_PATTERN);
        return format.format(date);
    }

    /**
     * 
     * 按指定格式转换日期   
     * @author wangzheng 2016年1月19日 上午10:40:25   
     * @param date
     * @param pattern
     * @return  
     * @since JDK 1.7
     */
    public static String dateToStr(Date date, String pattern) {
        String str = null;
        try {
            SimpleDateFormat format = new SimpleDateFormat(pattern);
            str = format.format(date);
        } catch (Exception e) {
            LOGGER.error("Exception INFO: ", e);
        }
        return str;
    }

    /**
     * 
     * 字符串转换成日期 格式：yyyy-MM-dd HH:mm:ss   
     * @author wangzheng 2016年1月19日 上午10:40:35   
     * @param str
     * @return  
     * @since JDK 1.7
     */
    public static Date strToDate(String str) {
        SimpleDateFormat format = new SimpleDateFormat(PATTERN);
        Date date = null;
        try {
            date = format.parse(str);
        } catch (Exception e) {
            LOGGER.error("Exception INFO: ", e);
        }
        return date;
    }

    /**
     * 
     * 字符串转换成日期 格式：yyyy-MM-dd
     * @author wangzheng 2016年1月25日 上午8:48:43   
     * @param shortStr
     * @return  
     * @since JDK 1.7
     */
    public static Date shortStrToDate(String shortStr) {
        SimpleDateFormat format = new SimpleDateFormat(SHORT_PATTERN);
        Date date = null;
        try {
            date = format.parse(shortStr);
        } catch (Exception e) {
            LOGGER.error("Exception INFO: ", e);
        }
        return date;
    }

    /**
     * 
     * 按指定格式转换日期   
     * @author wangzheng 2016年1月19日 上午10:40:44   
     * @param str
     * @param pattern
     * @return  
     * @since JDK 1.7
     */
    public static Date strToDate(String str, String pattern) {
        Date date = null;
        try {
            SimpleDateFormat format = new SimpleDateFormat(pattern);
            date = format.parse(str);
        } catch (Exception e) {
            LOGGER.error("Exception INFO: ", e);
        }
        return date;
    }

    /**
     * 
     * 获取YYYY-MM-DD 00:00:00格式时间
     * @author wangzheng 2016年1月29日 下午3:55:46   
     * @param startDate
     * @return  
     * @since JDK 1.7
     */
    public static Date getFullStartDate(Date startDate) {
        if (startDate != null) {
            Calendar c = Calendar.getInstance();
            c.setLenient(false);
            c.setTime(startDate);
            c.set(Calendar.HOUR_OF_DAY, 0);
            c.set(Calendar.MINUTE, 0);
            c.set(Calendar.SECOND, 0);
            return c.getTime();
        }
        return null;
    }

    /**
     * 
     * 获取YYYY-MM-DD 23:59:59格式时间
     * @author wangzheng 2016年1月29日 下午3:55:46   
     * @param startDate
     * @return  
     * @since JDK 1.7
     */
    public static Date getFullEndDate(Date endDate) {
        if (endDate != null) {
            Calendar c = Calendar.getInstance();
            c.setLenient(false);
            c.setTime(endDate);
            c.set(Calendar.HOUR_OF_DAY, 23);
            c.set(Calendar.MINUTE, 59);
            c.set(Calendar.SECOND, 59);
            return c.getTime();
        }
        return null;
    }
    
    /**
     * 
     * 两个时间相差的毫秒数
     * shenpingfeng 2016年4月28日 
     * @param startTime
     * @param endTime
     * @return
     */
    public static long dateDiff(Date startTime, Date endTime) {
        long diff = endTime.getTime() - startTime.getTime();
        return diff;
    }
    
    /**
     * 
     * 两个时间相差的分钟
     * shenpingfeng 2016年4月28日
     * @param startTime
     * @param endTime
     * @return
     */
    public static int dateDiffToMin(Date startTime, Date endTime) {
        long diff = dateDiff(startTime, endTime);
        long nm = 1000 * 60;//一分钟的毫秒数

        return (int) (diff / (nm));
    }
}
